A wide variety of memory devices can be used to maintain and store data and instructions for various computers and similar systems. In conventional computing systems, Dynamic Random Access Memory (DRAM) technology has typically been employed to operate the dynamic memory of the computer in order for an application to operate at high speeds. However, DRAM used as main memory in computer systems is no longer scaling as rapidly as in the past. As a result, DRAM storage has become a limited resource in computing environments.
A second tier of memory, such as non-volatile memory, may be used, which bridges the performance gap between DRAM and slower technologies such as NAND flash. The second tier of memory may be accessed locally over a memory or IO bus, or remotely over a high-speed network. However, applications need to explicitly manage data placement or the system must provide automatic management that transparently moves data between memory tiers. Thus, new techniques are needed for automatic management with minimal performance impact to overcome the inadequacies of existing techniques that were designed for slower storage devices.